JPA中的java刷新实体
我对如何刷新数据库中已有实体的状态感到困惑。更具体地说,假设我使用如下代码持久化了“实体”:
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
entityManager.close();
由于我关闭了EntityManager,我的实体实例被分离。现在假设我有其他对象使用这个实体实例。如果我想从数据库中获取该实体的新状态,我几乎不能使用em.refresh(),因为该实体已分离。em.merge()方法返回一个托管实例,由于它不是我的对象的同一个实例,这可能是一个问题。我可以预见两种解决方案:
- 在我的实体对象中创建一个新方法,该方法使用给定的实体实例更新其状态李>
- 不关闭实体管理器(暗示!)李>
那么,在这种情况下我应该怎么做?如何刷新实体对象的状态而不丢失其他对象对它的所有引用?想法
# 1 楼答案
通过刷新&;避免对实体进行更改;在持久化后分离,可以实现
Cloneable
接口&;然后相应地处理克隆的实体# 2 楼答案
如果实体A引用分离的实体B,则合并B返回B',并刷新B'。如果合并A,A将把B的引用改为B'